package com.gylang.dict.resolver;

import cn.hutool.core.lang.ClassScanner;
import com.gylang.api.annotation.EnumsDict;
import com.gylang.api.domain.EnumDictWrapper;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * @author gylang
 * data 2021/6/17
 */
@Component
public class AnnotationEnumDictResolver implements IEnumDictResolver {


	@Override
	public List<EnumDictWrapper> resolve() {

		List<EnumDictWrapper> enumDictWrappers = new ArrayList<>();
		Set<Class<?>> clazzs = ClassScanner.scanPackage("com.gylang");
		for (Class<?> clazz : clazzs) {
			EnumsDict annotation = clazz.getAnnotation(EnumsDict.class);
			if (clazz.isEnum() && null != annotation) {
				Object[] constants = clazz.getEnumConstants();
				EnumDictWrapper enumDictWrapper = enumDictWrapper(annotation.name(), annotation.type(), annotation.version(), annotation.module(), annotation.remark(), (Enum<?>[]) constants);
				enumDictWrappers.add(enumDictWrapper);
			}
		}

		return enumDictWrappers;
	}
}
